from typing import Optional
from .question import Question


class ErrorQuestion(Question):
    """错题实体类，继承自Question类"""
    def __init__(self,
                 id: Optional[int] = None,
                 question_id: Optional[int] = None,
                 category: Optional[str] = None,
                 user_id: Optional[int] = None,
                 # 以下是从Question类继承的属性
                 J: Optional[str] = None,
                 P: Optional[str] = None,
                 I: Optional[str] = None,
                 Q: Optional[str] = None,
                 T: Optional[str] = None,
                 A: Optional[str] = None,
                 B: Optional[str] = None,
                 C: Optional[str] = None,
                 D: Optional[str] = None,
                 F: Optional[str] = None,
                 LA: Optional[str] = None,
                 LB: Optional[str] = None,
                 LC: Optional[str] = None,
                 type: Optional[int] = None):
        """
        初始化错题实体
        :param id: 错题ID
        :param question_id: 题目ID
        :param category: 题目分类
        :param user_id: 用户ID
        :param J: 编号1
        :param P: 编号2
        :param I: 编号3
        :param Q: 题干
        :param T: 答案
        :param A: 选项A
        :param B: 选项B
        :param C: 选项C
        :param D: 选项D
        :param F: 可选的图片
        :param LA: LA=1 表示存在于A类题库
        :param LB: LB=1 表示存在于B类题库
        :param LC: LC=1 表示存在于C类题库
        :param type: 类型：1 单选题，2 多选题
        """
        # 调用父类构造函数初始化继承的属性
        super().__init__(
            id=question_id,  # 注意这里使用question_id作为父类的id
            J=J,
            P=P,
            I=I,
            Q=Q,
            T=T,
            A=A,
            B=B,
            C=C,
            D=D,
            F=F,
            LA=LA,
            LB=LB,
            LC=LC,
            type=type
        )
        # 初始化自己的属性
        self.error_id = id  # 重命名id为error_id以避免与父类的id冲突
        self.question_id = question_id
        self.category = category
        self.user_id = user_id

    def __dict__(self) -> dict:
        """将实体转换为字典"""
        # 获取父类的字典
        parent_dict = super().__dict__()
        # 添加自己的属性
        parent_dict.update({
            'id': self.error_id,
            'question_id': self.question_id,
            'category': self.category,
            'user_id': self.user_id
        })
        return parent_dict

    @classmethod
    def from_dict(cls, data: dict) -> 'ErrorQuestion':
        """从字典创建实体"""
        return cls(
            id=data.get('id'),
            question_id=data.get('question_id'),
            category=data.get('category'),
            user_id=data.get('user_id'),
            J=data.get('J'),
            P=data.get('P'),
            I=data.get('I'),
            Q=data.get('Q'),
            T=data.get('T'),
            A=data.get('A'),
            B=data.get('B'),
            C=data.get('C'),
            D=data.get('D'),
            F=data.get('F'),
            LA=data.get('LA'),
            LB=data.get('LB'),
            LC=data.get('LC'),
            type=data.get('type')
        )